package com.joker.airoleplayplatformback.service;

import com.joker.airoleplayplatformback.domain.dto.VoiceResponse;
import com.joker.airoleplayplatformback.websocket.VoiceChatWebSocketHandler;

/**
 * 语音聊天服务接口
 * @author feixiang.li
 * @since 2025-09-28
 */
public interface VoiceChatService {

    /**
     * 初始化聊天会话
     * @param websocketSessionId WebSocket会话ID
     * @param userId 用户ID
     * @param agentId 智能体ID
     * @param chatSessionId 聊天会话ID
     */
    void initChatSession(String websocketSessionId, Long userId, String agentId, String chatSessionId);

    /**
     * 处理音频流数据
     * @param websocketSessionId WebSocket会话ID
     * @param audioData 音频数据
     * @param handler 处理音频数据的处理程序
     */
    void processAudioStream(String websocketSessionId, byte[] audioData, VoiceChatWebSocketHandler handler);

    /**
     * 完成音频录制
     * @param websocketSessionId WebSocket会话ID
     */
    void finishAudioRecording(String websocketSessionId);
    
    /**
     * 处理完整的音频文件
     */
    void processCompleteAudio(String websocketSessionId, String audioFilePath);
    
    /**
     * 注册WebSocket处理器
     */
    void registerHandler(String websocketSessionId, VoiceChatWebSocketHandler handler);
    
    /**
     * 移除WebSocket处理器
     */
    void unregisterHandler(String websocketSessionId);


    /**
     * 获取语音类型列表
     * @return 语音类型列表
     */
    VoiceResponse getVoiceTypeList();

    /**
     * 处理语音文件
     * @param websocketSessionId WebSocket会话ID
     * @param audioFilePath 音频文件路径
     */
    void processVoiceFile(String websocketSessionId, String audioFilePath);

    /**
     * 处理MP3文件并返回处理后的音频数据
     * @param mp3FilePath MP3文件路径
     * @param userId 用户ID
     * @param agentId 智能体ID
     * @param sessionId 会话ID
     * @return 处理后的音频数据
     */
    byte[] processMp3File(String mp3FilePath, String userId, String agentId, String sessionId);
}
